package com.qf.controller;

import com.qf.utils.ResultVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.UUID;

/**
 * 2019/12/11 0011
 * Administrator
 * 江朝西暮，湖晨南曦
 */
@RestController
@RequestMapping("/upload")
@Slf4j
public class uploadController {
    private final long MXA_UPLOAD_SIZE=5242880;
    @Value("${pic.types}")
    private String types;
    @Value("${pic.path}")
    private String path;

    @PostMapping("/pic")
    public ResultVO pic(MultipartFile file) throws IOException {
//    图片不为空
        if(file==null){
            log.info("【上传图片】 图片上传项为null!! file={})",file);
             throw new RuntimeException("图片上传项为null");
        }
//    校验大小
        if(file.getSize()>MXA_UPLOAD_SIZE){
            log.info("【上传图片】 图像尺寸过大!! file={})",file);
            throw new RuntimeException("图像尺寸过大");
        }

//    校验类型
        boolean flag=false;
        for (String type : types.split(",")) {
            if (StringUtils.endsWithIgnoreCase(file.getOriginalFilename(), type)) {
                flag = true;
                break;
            }
        }
        if(!flag){
                log.info("【上传图片】 图像类型不正确!! file={})",file);
                throw new RuntimeException("图像类型不正确");
            }
//    是否损坏
        BufferedImage image = ImageIO.read(file.getInputStream());
        if(image==null){
//图片已损坏
            log.info("【上传图片】 图像已损坏!! file={})",file);
            throw new RuntimeException(" 图像已损坏");
        }
        //    起新名
        String prefixName = UUID.randomUUID().toString();
        String suffixName = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
        String newName=prefixName+suffixName;

//指定保文件的本地路径
        File pathFile=new File(path+newName);
        if(!pathFile.getParentFile().exists()){
//            如果本地不存在该文件夹就新创建
            pathFile.getParentFile().mkdirs();
        }
//        保存到本地
        file.transferTo(pathFile);

//        配置静态资源路径
        String url="http://localhost:8080/pic/"+newName;

//        返回图片的访问路径
        return new ResultVO(100,"上传成功",url);
    }
}
